package com.qfedu.aunt.commons.auth.security;

import com.qfedu.aunt.commons.constance.Constance;
import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.junit.Test;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 这个类的主要作用就是生成token 解析TOKEN信息
 * 删除token
 *
 *
 * token：就是一个特殊的字符串  这个字符串有相应的格式
 *
 * 这里的token就是使用JWT来挖完成
 *
 * JWT：JSON  WEB  TOKEN 说白了这个JWT就是token的一种构成形式 这个JWT中有三部分
 *
 *    头信息,载荷,签名
 *
 * 这个类说白了 就是为了生成这个字符串
 *
 */
@Component
public class TokenManager {

    //token有效时长
    private long tokenEcpiration = 24 * 60 * 60 * 1000;

    //编码秘钥
    private String tokenSignKey = "aunt_commons";

    //1 使用jwt根据用户名生成token
    public String createToken(String username,String adminId) {
        String token = Jwts.builder()
                .setSubject(username)
                .setId(adminId)
                .setExpiration(new Date(System.currentTimeMillis() + tokenEcpiration))
                .signWith(SignatureAlgorithm.HS512, tokenSignKey).compressWith(CompressionCodecs.GZIP).compact();
        return token;
    }


    //2 根据token字符串得到用户信息
    public String getUserNameFromToken(String token) {
        String username =
                Jwts.parser()
                        .setSigningKey(tokenSignKey)
                        .parseClaimsJws(token)
                        .getBody()
                        .getSubject();
        return username;
    }

    /**
     * 通过token获取登陆时间
     * @param token
     * @return
     */
    public long getLoginTime(String token){
        //这个时间就是咋们的过期时间
        Date expireDate = Jwts.parser()
                .setSigningKey(tokenSignKey)
                .parseClaimsJws(token)
                .getBody()
                .getExpiration();
        //接下来做减法
        long time = expireDate.getTime(); //时间戳
        long loginTime=time- Constance.getTokenExpireTime();
        //这个时间就是登陆时间
        return loginTime;
    }


    /**
     * 通过token获取用户的id信息
     * @param token
     * @return
     */
    public String getUserId(String token){
        String id = Jwts.parser()
                .setSigningKey(tokenSignKey)
                .parseClaimsJws(token)
                .getBody()
                .getId();
        return id;
    }


    //3 删除token
    public void removeToken(String token) {
    }


    @Test
    public void testA(){
//        String token = createToken("xiaobobo", "110");
//
//        System.out.println("token是:"+token);

        String str="eyJhbGciOiJIUzUxMiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAAAKtWKi5NUrJSqshMzE8CQiUdpaySTKCAoaEBkJ1aUaBkZWhmZm5kZmFiZFgLAJBPm4UvAAAA.Uu8zNirl_VO8h5PjBg2GMRvEAHegDq51t-kQoC5cyHG0cb3XQkFbV85nxdst9TsK85kl_HEDlKBO6J3JjfdsGg";

        String userNameFromToken = getUserNameFromToken(str);
        String userId = getUserId(str);
        System.out.println("用户名是:"+userNameFromToken+"---id是:"+userId);


    }

}